const fs = require('fs-extra');
const path = require('path');
const chalk = require('chalk');
const utils = require('./utils');
const inquirer = require('inquirer')
const red = chalk.red;
const { currentPath } = utils;

/**
 * 文件名 一个用户输入的结果
 * @param {string} fileName 
 * @param {function} callback 
 */
function promptModule(fileName, callback){
  inquirer.prompt([
    {
        type: 'input', // 问题类型
        name: 'name', // 数据属性名
        message: '请输入项目名称', // 提示信息
        default: utils.changeName(fileName), // 默认值
    }
  ]).then( answers =>{
      // 处理结果
      callback(answers.name)
  })
}

/**
 * 文件名 一个用户输入的结果
 * @param {string} fileName 
 * @param {function} callback 
 */
function selectModule(callback){
  inquirer.prompt([{
        type: 'list',
        name: 'type',
        message: '请选择发布方式?',
        choices: [
            { name: 'daily（预发发布）', value: 'daily' },
            { name: 'publish（正式发布）', value: 'publish' }
        ],
    }
  ]).then( answers =>{
      // 处理结果
      callback(answers.type)
  })
}

/**
 * 入口函数
 * @param {array} cmd  cmd 命令
 * @param {string} fileName  
 */
async function create(cmd, fileName) {
  // tempName = cmd[0];
  // projectName = project;
  // forceDel = force;
  const file = currentPath + fileName;
  switch (cmd[0]){
    case 'init': 
      init(cmd, fileName)
      break;
    case 'publish': 
      selectModule((data)=>{
        publish(data, fileName)
      })
      break;
    default:
      console.log(chalk.re)
  }
  
}
/**
 * 项目发布
 * @param {string} type  daily、publish
 */
async function publish (type, fileName){
  utils.log('green','启动代码检查')
  utils.publishCode(type).then(res => {
    utils.log('green','代码检查通过')
    // 启动webpack打包
    utils.log('green','正在启动webpack打包')
    utils.webpackStart();
    utils.log('green','打包完成，正在推送代码库')

    utils.uploadFile(fileName, res.replace("daily/", ""),type)
    // 推送代码
    utils.log('green','推送打包代码进入cdn完成')
    // 启动webpack打包
    utils.log('green','发布完成')
  });
}

/**
 * 创建项目
 * @param {*} cmd 
 * @param {*} fileName 
 */
async function init (cmd, fileName){
  try {
    // 检验文件夹是否为空
    if(utils.isEmptyDir(currentPath)){
      promptModule(fileName, function(moduleName){
        console.log(moduleName)
        utils.downloadByGit(moduleName, ()=>{
          utils.log('green',("初始化成功"))
        })
      })
    }else{
      // 询问用户当前不为空，是否仍要执行初始化
      inquirer.prompt([
        {
            type: 'confirm', // 问题类型
            name: 'flag', // 数据属性名
            message: '当前文件夹不为空是否仍要继续', // 提示信息
        }
      ]).then(answers =>{
          // 处理结果
          if(answers.flag){
            
            promptModule(fileName, function(moduleName){
              console.log(moduleName)
              utils.downloadByGit(moduleName, ()=>{
                utils.log('green',("初始化成功"))
              });
            })
          }
      })
    }
  } catch (err) {
    console.error(red(err));
  }
}

module.exports = create;